package com.dengcj.util;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author dengchunjie
 * @Description:
 * @date 2022/1/10/ 17:45
 */
public class CjArrayUtil {

    /**
     * 获取两个数组的交集
     * @param arrayA
     * @param arrayB
     * @return
     */
    public static String[] getIntersection(String[] arrayA,String[] arrayB){
        List<String> rs = new ArrayList<>();

        // 将较长的数组转换为set
        Set<String> set = Arrays.stream(arrayA.length > arrayB.length ? arrayA : arrayB).collect(Collectors.toSet());

        // 遍历较短的数组，实现最少循环
        for (String i : arrayA.length > arrayB.length ? arrayB : arrayA){
            if (set.contains(i)){
                rs.add(i);
            }
        }

        String[] arr = {};
        return rs.toArray(arr);
    }

    /**
     * 获取两个数组的差集
     * @param arrayA
     * @param arrayB
     * @return
     */
    public static String[] getDifferenceSet(String[] arrayA,String[] arrayB){
        // 将较长的数组转换为set
        Set<String> set = new HashSet<String>(Arrays.asList(arrayA.length > arrayB.length ? arrayA : arrayB));

        // 遍历较短的数组，实现最少循环
        for (String i : arrayA.length > arrayB.length ? arrayB : arrayA){
            if("".equals(i)) {
                continue;
            } else if (set.contains(i)){// 如果集合里有相同的就删掉，如果没有就将值添加到集合
                set.remove(i);
            } else {
                set.add(i);
            }
        }

        String[] arr = {};
        return set.toArray(arr);
    }

    /**
     * 从数组中删除某个元素
     * @param array
     * @param item
     * @return
     */
    public static String[] removeItem(String[] array,String item){
        List<String> list=Arrays.asList(array);//将数组转换为list集合
        if(list.contains(item)){//加入集合中包含这个元素
            List<String> arrayList=new ArrayList<>(list);//转换为ArrayLsit调用相关的remove方法
            arrayList.remove(item);
            array = new String[arrayList.size()];
            return arrayList.toArray(array);
        }

        return array;
    }

    /**
     * 从数组中删除多个元素
     * @param array
     * @param items
     * @return
     */
    public static String[] removeItem(String[] array,String[] items){
        List<String> arrayList = new ArrayList<>(Arrays.asList(array));//转换为ArrayLsit调用相关的remove方法
        for(String item : items) {
            if (arrayList.contains(item)) {//加入集合中包含这个元素
                arrayList.remove(item);
            }
        }

        array = new String[arrayList.size()];

        return arrayList.toArray(array);
    }
}
